// createTipsMessage.ts
import { h, VNode } from 'vue'

/**
 * 支持的语法：
 * {文本:style}
 * 例如： "超过 {20:color:red;font-weight:bold;} MB"
 */
function parseTip(text: string) {
  const regex = /\{([^:}]+):([^}]+)\}/g
  const parts: Array<string | { text: string; style: string }> = []
  let lastIndex = 0
  let match
  while ((match = regex.exec(text)) !== null) {
    // 普通文字（前一段）
    if (match.index > lastIndex) {
      parts.push(text.slice(lastIndex, match.index))
    }
    // 高亮部分
    parts.push({ text: match[1], style: match[2] })
    lastIndex = regex.lastIndex
  }
  // 剩余的普通文字
  if (lastIndex < text.length) {
    parts.push(text.slice(lastIndex))
  }

  return parts
}
export function createTipsMessage(tips: string[]): VNode {
  return h(
    'div',
    tips.map((tip) =>
      h(
        'p',
        parseTip(tip).map((part) => {
          if (typeof part === 'string') {
            return part
          }
          return h('span', { style: part.style }, part.text)
        }),
      ),
    ),
  )
}

export const uploadTips = [
  '1. 文件上传前请确认格式是否正确；',
  '2. 单个文件大小不得超过 {1024:color:red;font-weight:bold;} MB；',
  '3. 文件上传已做分片上传和断点续传，但实际会受网速影响，理论上会比普通情况快4倍；',
  '4. 文件安全1：文件存储依托于 {腾讯云COS:color:red;font-weight:bold;}对象存储，严格遵循 {COS:color:red;font-weight:bold;}安全规范，系统会为每个用户开辟一个存储区，未在您的授权下，不会去查看任何一位用户存储的信息!；',
  '5. 文件安全2: 文件访问也同样有着极其严格的控制，目前整体流程是：请求->校验请求 -> 生成临时密钥 -> 临时密钥颁发一次性签名信息 -> 返回临时文件地址。',
  '6. 您可以放心使用文件上传功能，不必担心文件安全问题',
  '7. 除图片上传外，其余文件上传均需手动上传至服务器，并且可以删除服务器上的文件',
  '8. 如果您不小心上传了敏感文件，无法确定是否删除成功，请及时联系管理员！',
]
